Skip to content

[Brand design updates - Core App Components] Update Pictograms & Icons for internal builds - #9552

Open
mikescamell wants to merge 9 commits into
developfrom
feature/mikescamell/rebrand-pictograms
Open

[Brand design updates - Core App Components] Update Pictograms & Icons for internal builds#9552
mikescamell wants to merge 9 commits into
developfrom
feature/mikescamell/rebrand-pictograms

Conversation

@mikescamell

@mikescamell mikescamell commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Task/Issue URL: https://app.asana.com/1/137249556945/project/488551667048375/task/1216445767066010?focus=true
Tech Design URL (if applicable):
API Proposals URL(s) (if applicable):

Description

  • Updates the app’s pictograms and animated icons to the latest brand artwork.
  • Adds 2026 pictogram overrides to internal builds so the updated artwork can be smoke-tested across representative app surfaces without checking every asset individually.
  • Adds a pictograms feature sub-flag under appBrandDesignUpdate.
  • Updates the feedback faces, Passwords keychain promotion, VPN header animation, Home Screen Widget promotion, and Home Screen Widget search-bar styling behind the pictograms feature flag.
  • Preserves the existing artwork and widget search-bar styling for these specifically gated areas when the pictograms feature flag is disabled.

Steps to test this PR

Testing every updated pictogram individually is not expected. The internal-build smoke test below covers representative surfaces. The focused sections cover the places where code changes were required.

Note

The resources under app/src/internal/res are internal-build overrides and remain updated regardless of the pictograms flag.

Turning the flag off provides before/after coverage for the explicitly gated code changes: feedback, Passwords, VPN, the widget promotion, and placed Home Screen Widget search bars.

The widget-picker and widget-configuration previews are internal resource overrides, so they remain updated when the flag is off. Use the placed Home Screen widgets for the flag-off comparison.

If screenshots of the protected Passwords screen are required, install using:

./gradlew :app:installInternalDebug -Pautofill-disable-auth-requirement

Internal pictogram smoke test

Visit a representative selection of the following areas:

  • Settings

    • Appearance
    • Passwords & Autofill
    • Sync & Backup
    • AI Features
    • Privacy Pro
    • Email Protection
    • App Tracking Protection
    • Web Tracking Protection
    • Ad Blocking
    • Cookie Pop-Up Protection
    • Private Search
    • Duck Player
  • Browser

    • Empty Bookmarks
    • Data Clearing
    • Get Desktop Browser
    • Add Widget to Home Screen
  • Import and Sync

    • Import Passwords
    • Import Bookmarks
    • Create a Sync account
    • Recover a Sync account
    • Connected Sync state
  • Other

    • Widget Configuration
    • Unsupported-device screens
    • Mac and Windows download instructions
    • Onboarding search and Duck.ai screens
  • Open a representative selection of the surfaces above.

  • Confirm the updated pictograms are displayed.

  • Confirm no images are blank.

  • Confirm no images are clipped or stretched.

  • Confirm image colours remain correct in the Light theme.

  • Switch the app to the Dark theme.

  • Confirm theme-sensitive images remain legible in the Dark theme.

Flag ON — updated versions

Enable the pictograms flag

This is on by default for internal builds so you can skip for them

  • Open Settings → Other → Internal Settings → Feature Flag Inventory.
  • Find appBrandDesignUpdate.
  • Enable its pictograms sub-feature.
  • Force-close the app.
  • Relaunch the app.

Feedback

  • Open Settings → Share Feedback.
  • Confirm the updated positive and negative faces are displayed.
  • Select the positive response.
  • Confirm the updated positive pictogram is displayed.
  • Return to the initial feedback screen.
  • Select the negative response.
  • Confirm the updated negative pictogram is displayed.
  • Continue through the negative-feedback reasons.
  • Confirm the updated negative pictogram remains consistent across the flow.

Passwords keychain promotion

Use an empty Passwords store with the import promotion eligible.

  • Open Settings → Passwords & Autofill → Passwords.
  • Add a dummy password
  • Open Internal Settings → Autofill.
  • Select Clear Previous Google Imports interactions.
  • Open Settings → Passwords & Autofill → Passwords.
  • Confirm the import promotion is displayed within the Passwords screen.
  • Confirm the updated static keychain pictogram is displayed.
  • Confirm the surrounding Passwords screen is rendered normally.
  • Open a new tab
  • Go to Google.com
  • Click Sign in
  • Click on Email or phone
  • Confirm the Google Passwords import promotion uses the updated static keychain pictogram.

VPN header

Probably easiest on an internalRelease build with pro subscription.

  • Open the app menu.
  • Select VPN.
  • Turn the VPN off.
  • Confirm the updated VPN header animation is displayed in the off state.
  • Turn the VPN on.
  • Confirm the updated VPN header animation is displayed in the on state.
  • Confirm the VPN status text matches the actual connection state.

Home Screen Widget promotion

Remove any existing DuckDuckGo Home Screen widgets before testing.

  • Open Settings → Add Widget to Home Screen.
  • Confirm the updated widget promotion artwork is displayed.
  • Confirm the artwork is not cropped.
  • Switch the app to the Dark theme.
  • Reopen Add Widget to Home Screen.
  • Confirm the Dark theme artwork is displayed.

Home Screen Widgets — Search and Favorites

Remove the widget before testing each theme so that every scenario starts from the widget picker.

Light

  • Open the device’s Home Screen widget picker.
  • Locate DuckDuckGo → Search and Favorites.
  • Confirm its picker preview shows a pill-shaped search bar.
  • Add Search and Favorites.
  • Select Light on the Choose Theme screen.
  • Confirm the configuration panel has a white background.
  • Confirm the configuration preview shows a pill-shaped search bar.
  • Select Add Widget.
  • Confirm the placed widget has a pill-shaped search bar.
  • Remove the widget from the Home Screen.

Dark

  • Open the device’s Home Screen widget picker.
  • Locate DuckDuckGo → Search and Favorites.
  • Confirm its picker preview shows a pill-shaped search bar.
  • Add Search and Favorites.
  • Select Dark on the Choose Theme screen.
  • Confirm the configuration preview shows a pill-shaped search bar.
  • Select Add Widget.
  • Confirm the placed widget has a pill-shaped search bar.
  • Confirm the search-bar contents remain legible.
  • Remove the widget from the Home Screen.

Home Screen Widgets — other variants

  • Open the device’s Home Screen widget picker.
  • Locate DuckDuckGo → Search Only.
  • Confirm its picker preview shows a pill-shaped search bar.
  • Add Search Only to the Home Screen.
  • Confirm the placed Search Only widget has a pill-shaped search bar.
  • Remove Search Only from the Home Screen.
  • Open the device’s Home Screen widget picker.
  • Locate the light DuckDuckGo → Search and Duck.ai variant.
  • Confirm its picker preview shows a pill-shaped search bar.
  • Add the light Search and Duck.ai variant to the Home Screen.
  • Confirm the placed light Search and Duck.ai widget has a pill-shaped search bar.
  • Remove the light Search and Duck.ai widget from the Home Screen.
  • Open the device’s Home Screen widget picker.
  • Locate the dark DuckDuckGo → Search and Duck.ai variant.
  • Confirm its picker preview shows a pill-shaped search bar.
  • Add the dark Search and Duck.ai variant to the Home Screen.
  • Confirm the placed dark Search and Duck.ai widget has a pill-shaped search bar.
  • Remove the dark Search and Duck.ai widget from the Home Screen.

Flag OFF — previous versions

Disable the pictograms flag

  • Open Settings → Other → Internal Settings → Feature Flag Inventory.
  • Find appBrandDesignUpdate.
  • Disable its pictograms sub-feature.
  • Force-close the app.
  • Relaunch the app.

Feedback

  • Reopen Settings → Share Feedback.
  • Confirm the previous feedback faces are displayed.
  • Confirm the positive-feedback flow remains functional.
  • Confirm the negative-feedback flow remains functional.

Passwords keychain promotion

  • Reopen Settings → Passwords & Autofill → Passwords.
  • Confirm the previous animated keychain is displayed.
  • Confirm the promotion remains embedded within the Passwords screen.
  • Confirm the Passwords screen does not crash.

VPN header

  • Reopen VPN.
  • Confirm the previous VPN header is displayed.
  • Turn the VPN off.
  • Confirm the off state remains functional.
  • Turn the VPN on.
  • Confirm the on state remains functional.

Home Screen Widget promotion

  • Reopen Settings → Add Widget to Home Screen.
  • Confirm the previous widget promotion artwork is displayed.
  • Confirm the widget can still be added.

Home Screen Widgets

The internal picker/configuration previews remain updated in this state. Compare the placed widgets with the flag-on results.

  • Remove every DuckDuckGo widget from the Home Screen.
  • Add Search and Favorites with the Light theme.
  • Confirm its placed search bar uses the previous corner radius.
  • Remove Search and Favorites from the Home Screen.
  • Add Search and Favorites with the Dark theme.
  • Confirm its placed search bar uses the previous corner radius.
  • Remove Search and Favorites from the Home Screen.
  • Add Search Only to the Home Screen.
  • Confirm its placed search bar uses the previous corner radius.
  • Remove Search Only from the Home Screen.
  • Add the light Search and Duck.ai variant to the Home Screen.
  • Confirm its placed search bar uses the previous corner radius.
  • Remove the light Search and Duck.ai widget from the Home Screen.
  • Add the dark Search and Duck.ai variant to the Home Screen.
  • Confirm its placed search bar uses the previous corner radius.
  • Remove the dark Search and Duck.ai widget from the Home Screen.

UI changes

See here


Note

Low Risk
Visual/brand assets and an internal-only feature flag. No auth, data, or production default behaviour change.

Overview
Adds a pictograms sub-flag under appBrandDesignUpdate (internal by default) and ships 2026 pictogram/icon artwork as internal-build resource overrides so brand updates can be smoke-tested without swapping every production asset.

Most artwork is flavour-gated via app/src/internal/res. Call sites that change drawable type or behaviour (feedback faces, Passwords keychain promo, VPN header animation, home-screen widget promo) read pictograms() and keep the previous assets when the flag is off. The flag is also pre-warmed on app create with the existing theme/address-bar toggles.

Reviewed by Cursor Bugbot for commit eecb245. Bugbot is set up for automated code reviews on this repo. Configure here.


Gates the swaps that cannot ship as internal resource overrides because they
change drawable type or call-site behaviour. Pre-warmed alongside the other
sub-toggles so call sites can read it synchronously without a first-read disk
hit on the main thread.
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-pictograms branch from 209410d to 43a457b Compare August 20, 2026 11:27

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 43a457b. Configure here.

Comment thread app/src/internal/res/drawable/ad_blocking_header_128.xml
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-pictograms branch from 43a457b to 8c9e5c3 Compare August 20, 2026 14:19
@mikescamell mikescamell changed the title Add a pictograms sub-toggle for the 2026 pictogram swaps [Brand design updates - Core App Components] Update Pictograms & Icons for internal builds Aug 20, 2026
Widget previews, Duck.ai settings searchboxes, the tab-list shield and the
Duck.ai transitions. Flavour-gated: an app internal override shadows the
same-named resource from main and from library modules, so Play and F-Droid
builds are untouched.

Includes the three input-screen tab selectors, which are overridden rather
than the indicator layouts because the dark icon is set from Kotlin.
Six light/dark PNG pairs collapse to two theme-agnostic vectors. The 2026
assets drop the baked-in border, so the button border is drawn in code from
theme attributes with the pictogram centred on top.

The toggle is read synchronously after the existing render, so the flag-off
path keeps its original ordering.
The 2026 replacement is a static pictogram rather than a Lottie, so both call
sites cancel the animation and set a drawable on the existing
LottieAnimationView instead of playing it. The raw animation stays for the
flag-off path.
One theme-agnostic animation replaces the light/dark pair. The replacement is
authored on a 2560x1920 canvas against the current 128x96, same 4:3 ratio, so
the view is pinned to the original size on the enabled path only.
The 2026 artwork is too complex to vector, so this changes drawable type: the
replacements ship as WebP across the density buckets while the existing vector
drawables stay for the flag-off path.
Settings > Appearance now shows the top/bottom/split address bar pictograms in
the 2026 palette: #1074CC over #CBEAFF, replacing #3969ef over #ccdaff. These
ship as same-name resource overrides in the internal flavour rather than as a
flag-gated second set of resources, so no production file changes and the Play
and F-Droid builds are untouched.

The brand-design onboarding picker is deliberately left alone. It reads its own
_brand_design_update_ resource family, which uses a slightly different blue
(#2F95EE / #4397E0), and reconciling the two palettes is out of scope for now.
The old onboarding welcome page does read the same family as Settings, so it
picks up the new artwork in internal builds too; it is being retired, so that
is accepted.

Verified by decoding the mergeInternalDebugResources output rather than by
inspection, since a missed override fails silently: all twelve merged resources
carry the new path data, and the _brand_design_update_ control still carries
the old.
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-pictograms branch from 8c9e5c3 to eecb245 Compare August 20, 2026 15:07
@mikescamell
mikescamell marked this pull request as ready for review August 20, 2026 18:05
@mikescamell
mikescamell requested a review from malmstein as a code owner August 20, 2026 18:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants